
int STBY = 6;       /* STBY为正常工作/待机状态控制引脚 */

int AIN1 = 7;
int AIN2 = 8;
int PWMA = 10;

int ENCODEA = 3;     /* 电机测速编码器A相 */
int ENCODEB = 11;     /* 电机测速编码器B相 */

unsigned int count1 = 0;      /* 中断计数值 */
unsigned int count2 = 0;      /* 中断计数值 */
float t = 0;        /* 系统启动时间 */
float v = 0;        /* 计算得到的平均转速, 单位 r/min */

void setup()
{
  /* 设置引脚均为输出模式 */
  pinMode(STBY, OUTPUT);

  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
  pinMode(PWMA, OUTPUT);

  /* 设置 PIN3 为外部中断引脚, 中断触发方式为双边沿触发 */
  attachInterrupt(digitalPinToInterrupt(ENCODEA), PIN3ISR, RISING);

  Serial.begin(115200);

  /* 设置 TB6112 为正常工作模式 */
  digitalWrite(STBY, HIGH);

#if 1
  /* 设置电机正转, count1++ */
  digitalWrite(AIN1, HIGH);
  digitalWrite(AIN2, LOW);
#else
  /* 设置电机反转, count2++ */
  digitalWrite(AIN1, LOW);
  digitalWrite(AIN2, HIGH);
#endif

  analogWrite(PWMA, 255);
}

void loop()
{
  /* 获取当前时间, 单位 ms */
  t = millis();

  /* 打印中断计数值和计算得到的平均转速 */
  Serial.print("count1 = ");
  Serial.println(count1);
  Serial.print("count2 = ");
  Serial.println(count2);
  delay(1000);
}

void PIN3ISR(void)
{
  if (0 == digitalRead(ENCODEB))
  {
    count1++;
  }
  else if (1 == digitalRead(ENCODEB))
  {
    count2++;
  }
}
